/**
 * Created by i3-00000 on 2017-3-29.
 */
//加载express模块
var express=require('express');
//加载模版处理模块，用于响应客户端的请求，如果把响应的内容直接写在app.js中，那么app.js就会变得很大，所以使用模板将内容放到模板中，app.js引用模板就可以了
var swig=require('swig');
//加载mongoose数据库模块
var mongoose=require('mongoose');
//加载body-parser,用来处理post或get提交过来的数据
var bodyParser=require('body-parser');
//引入cookies模块
var Cookies=require('cookies');

//创建app应用,相当于node中的服务器对象,http.createServer();
var app=express();
var User=require('./models/user');
//配置应用模版，定义当前应用所使用的模版
//第一个参数模板引擎的名字，同时也是模板文件的后缀，第二个参数表示用于解析处理模板内容的方法
app.engine('html',swig.renderFile);
//设置模板文件存放的目录，第一个参数必须是views,第二个参数是目录
app.set('views','./views');
//注册所使用的模板引擎，第一个参数必须是view engine,第二个参数是app.engine方法中的第一个参数（模板名称）要一致
app.set('view engine','html');
//在开发过程中，需要取消模板缓存，这样修改了内容就不需要重启服务器
swig.setDefaults({cache:false});
//bodyparser设置,设置以后会在路由post方法下的req自动注入body，自动保存post提交过来的数据
app.use(bodyParser.urlencoded({extended:true}));
//设置cookie,无论请求哪个地址都会走这个中间建
app.use(function(req,res,next) {
       req.cookies = new Cookies(req, res);
        //定义一个全局的userInfo，方便在页面验证时使用
        req.userInfo={};
        if(req.cookies.get('userInfo')){
            try{
                req.userInfo=JSON.parse(req.cookies.get('userInfo'));
            }
            catch(e){

            }
        }
        next();
    }
);
//当用户访问的url以/public开始，那么直接返回对应_dirname(当前文件路径)+'/public'下的文件
//设置中间键
app.use('/public',express.static(__dirname+'/public'));
//根据不同的功能划分模块
//后台模块
app.use('/admin',require('./routes/admin'));
//api模块
app.use('/api',require('./routes/api'));
//首页模块
app.use('/',require('./routes/main'));
//服务器根据客户端的路径进行响应，‘/’是首页
//next 函数，响应完成后执行的下一个操作
//app.get('/',function(req,res,next){
//    //读取views目录下的指定文件，解析并返回给客户端
//    //第一个参数：表示模板的文件，views目录下，
//    //第二个参数：传递给模板使用的数据
//   res.render('main/index');
//})

//开启数据库服务器,blog代表数据库名称,监听http请求
mongoose.connect('mongodb://localhost:27017/blog',function(err){
   if(err){
      console.log('数据库链接失败');
   }
   else{
      console.log('数据库链接成功');
      //监听http请求
      app.listen(8080);
   }
});
